home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr02 / bulkst10.zip / MAILSORT.PRG < prev    next >
Text File  |  1993-06-15  |  18KB  |  757 lines

  1. *
  2. * Bulk Mail Sorting Program
  3. * Version 1.0
  4. * Written by Gerri Hesselberg
  5. * June, 1993
  6. *
  7. * This program was written by a frustrated office manager in an attempt
  8. * to save labor manually sorting labels. 
  9. *
  10. * The program is stand alone and can be run as is.  Use the setup to tell
  11. * the system about the file name and long field name (for label instructions).
  12. * Make sure there is a character field called ZIP_CODE, and make sure
  13. * there is NO field called ORDER.  Then run setup the first time you
  14. * use the program.
  15. *
  16. * Files used: MAILSORT.PRG
  17. *                ZIPSUM.DBF
  18. *             MAILSYST.DBF
  19. *             MAILZIP.NDX (Foxpro may change this to .IDX)
  20. *
  21. *
  22. * Rules:  Please feel free to use this code as you wish, but be sure to
  23. * send $20 to the address shown in the setup option. 
  24. *
  25. * Please send any feedback, comments, or questions either to the mailing
  26. * address shown in the setup option or to Tuvia Vinitsky, CIS 70034,510
  27. *
  28. * Happy sorting!
  29. *
  30.  
  31. CLEAR ALL               
  32. SET TALK OFF          
  33. SET BELL OFF            
  34. SET HEADING OFF       
  35. SET DELETED ON
  36. SET SAFETY OFF
  37. mchoice = 1
  38. do while .t.                       
  39. clear
  40. @ 5,5 say '[1] Run mail sort program'
  41. @ 7,5 say '[2] Change postal rates'
  42. @ 9,5 say '[3] Instructions and setup'
  43. @ 11,5 say '[4] Exit'
  44. @ 13,10 say 'Enter choice:  ' get mchoice pict '9' range 1,4
  45. read
  46. use mailsyst
  47. 1
  48. mfive = five
  49. mbasic = basic
  50. mfield = field
  51. mlist = list
  52. do case
  53.     case mchoice = 4
  54.         CLEAR ALL               
  55.         SET TALK on          
  56.         SET BELL on            
  57.         SET HEADING on       
  58.         SET DELETED off
  59.         SET SAFETY on
  60.         return
  61.     case mchoice = 1
  62.         exit
  63.     case mchoice = 2
  64.         clear
  65.         @ 5,5 say 'Enter 3/5 presort rate:  ' get mfive pict '9.999'
  66.         @ 7,5 say 'Enter basic rate:        ' get mbasic pict '9.999'
  67.         read
  68.         replace five with mfive
  69.         replace basic with mbasic
  70.         clear
  71.         wait 'Hit "x" to exit, any other key to run mailsort' to mx
  72.         if upper(mx) = 'X'
  73.             CLEAR ALL               
  74.             SET TALK ON
  75.             SET BELL on            
  76.             SET HEADING on       
  77.             SET DELETED off
  78.             SET SAFETY on
  79.             return
  80.         endif
  81.     case mchoice = 3
  82.         clear
  83.  
  84.         text
  85.  
  86. Mailsort will sort your mailing list by five-digit ZIP Code in proper order 
  87.  
  88. for third class (bulk) mailing.
  89.  
  90.  
  91. This program is current with the postal regulations as of June 14, 1993.
  92.  
  93.  
  94. Please send $20 to:
  95.  
  96.                      Vinitsky Consulting
  97.                      c/o Y.M.T.
  98.                      2728 West Pratt
  99.                      Chicago, Illinois  60645
  100.  
  101. to be notified of upgrades.
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.         endtext
  109.  
  110.         wait 'Hit any key for next screen.'
  111.         clear
  112.         text
  113. Mailsort needs to be setup.  When you run the setup, you will be asked 
  114.  
  115. for the following:  1) the name of your mailing list, 2) the name of a 
  116.  
  117. long field in your record, 3) the current 3/5 presort rate, and
  118.  
  119. 4) the current basic rate.
  120.  
  121.  
  122. When the postage rates change, it is not necessary to run the entire setup.  
  123.  
  124. A menu option allows you to change just the postage.
  125.  
  126. IMPORTANT: The zip code field in the database must be called ZIP_CODE.
  127. The sort routine will add a field called ORDER to your database, make
  128. sure there is not a field by that name already.  Also, no zip code
  129. fields can be blank. (This limitation will be addressed in future
  130. versions.)
  131.  
  132.         endtext
  133.         wait 'Hit "X" to exit, any other key to run set-up.' to mx
  134.         if upper(mx) <> 'X'
  135.             clear
  136.             @ 5,5 say 'Please enter the following information:'
  137.             @ 7,5 say 'Mailing list name:  ' get mlist
  138.             @ 8,5 say 'EXAMPLE:  FILENAME or FILENAME.EXT if on this directory,'
  139.             @ 9,5 say '\DIRECTORY\FILENAME or \DIRECTORY\FIELNAME.EXT if on a'
  140.             @ 10,5 say 'different directory.'
  141.             @ 12,5 say 'Long field in record:  ' get mfield
  142.             @ 14,5 say 'Enter 3/5 presort rate:  ' get mfive pict '9.999'
  143.             @ 16,5 say 'Enter basic rate:        ' get mbasic pict '9.999'
  144.             read
  145.             replace five with mfive
  146.             replace basic with mbasic
  147.             replace list with mlist
  148.             replace field with mfield
  149.             clear
  150.             use &mlist
  151.             copy to mailext structure extended
  152.             use mailext
  153.             appe blank
  154.             replace field_name with 'order'
  155.             replace field_type with 'N'
  156.             replace field_len with 3
  157.             replace field_dec with 0
  158.             create mailing from mailext
  159.             wait 
  160.             mchoice = 1
  161.             loop
  162.             endif
  163.     endcase
  164. enddo
  165. clear
  166. mmax = 125
  167. @ 5,5 say 'Enter maximum number of pieces per sack:  ' get mmax pict '9999' range 125,
  168. @ 6,5 say 'minimum is 125.'
  169. read
  170. clear
  171. @ 10,10 say 'Please be patient . . .'
  172. y = 1
  173. z = 5
  174. nosack = 0
  175. acount = 0
  176. bcount = 0
  177. sele 1
  178. use zipsum
  179. zap
  180. sele 2
  181. use mailing index mailzip
  182. zap
  183. appe from &mlist
  184. rein
  185. go top
  186. set device to print
  187.     @ z,7 say 'MAIL SUMMARY REPORT'
  188.     Z = Z + 2
  189.     @ Z,7 say 'SACK'
  190.     @ Z,17 SAY 'STATE'
  191.     @ Z,27 SAY 'COUNT'
  192.     @ Z,37 SAY '# OF SACKS'
  193.     Z = Z + 2
  194.     if z > 55
  195.         eject
  196.         z = 5
  197.         @ Z,5 say 'ZIP CODE'
  198.         @ Z,17 SAY 'STATE'
  199.         @ Z,27 SAY 'COUNT'
  200.         @ Z,37 SAY '# OF SACKS'
  201.         Z = Z + 2
  202.     endif
  203. ****************
  204. *FIND "5" SACKS*
  205. ****************
  206.     do while (zip_code >= '00001' .and. zip_code <= '99999-9999')
  207.         mzip = left(zip_code,5)
  208.         mst = state
  209.         count while zip_code = mzip to mcount
  210.         sele 1
  211.         appe blank
  212.         replace zip_code with mzip, count with mcount, state with mst
  213.         if mcount >= 125
  214.             replace done with .t.
  215.             if mcount > mmax
  216.                 mtest1 = int(mcount/mmax)
  217.                 mtest2 = int(mcount/mtest1)
  218.                 if mtest2 > mmax
  219.                     mnum = mtest1 + 1
  220.                 else
  221.                     mnum = mtest1
  222.                 endif
  223.             else
  224.                 mnum = 1
  225.             endif
  226.             replace sack with mnum
  227.             sele 2
  228.             appe blank
  229.             replace order with y
  230.             replace &mfield with 'Use ' + str(mnum,2) + ' sack(s)'    
  231.             y = y + 1
  232.             appe blank
  233.             replace order with y
  234.             replace &mfield with 'Use "D" tag'
  235.             y = y + 1    
  236.             find &mzip
  237.             replace order with y while zip_code = mzip
  238.             sele 1
  239.             y = y + 1
  240.             @ Z,7 SAY MZIP
  241.             @ Z,19 SAY MST
  242.             @ Z,28 SAY STR(MCOUNT,4)
  243.             @ Z,42 SAY STR(MNUM,2)
  244.             z = z + 2
  245.             nosack = nosack + mnum
  246.             acount = acount + mcount            
  247.         else
  248.             replace done with .f.
  249.         endif
  250.         sele 2
  251.     enddo
  252. ****************
  253. *FIND "3" SACKS*
  254. ****************
  255.     sele 1
  256.     do while .t.
  257.         set filt to (.not. done .and. count >= 10)
  258.         go top
  259.         do while .not. eof()
  260.             mzip = left(zip_code,3)
  261.             mst = state
  262.             sum count while zip_code = mzip to mcount
  263.             if mcount >= 125
  264.                 set filt to (.not. done .and. zip_code = mzip)
  265.                 go top
  266.                 sum count to mcount
  267.                 if mcount > mmax
  268.                     mtest1 = int(mcount/mmax)
  269.                     mtest2 = int(mcount/mtest1)
  270.                     if mtest2 > mmax
  271.                         mnum = mtest1 + 1
  272.                     else
  273.                         mnum = mtest1
  274.                     endif
  275.                 else
  276.                     mnum = 1
  277.                 endif
  278.             else
  279.                 set filt to (.not. done .and. zip_code = mzip)
  280.                 go top
  281.                 replace sack with 99, done with .t. while zip_code = mzip
  282.                 set filt to (.not. done .and. count >= 10)
  283.                 go top
  284.                 loop
  285.             endif
  286.             sele 2
  287.             appe blank
  288.             replace order with y
  289.             replace &mfield with 'Use ' + str(mnum,2) + ' sack(s)'    
  290.             y = y + 1
  291.             appe blank
  292.             replace order with y
  293.             replace &mfield with 'Use "D" tag'
  294.             y = y + 1
  295.             sele 1
  296.             set filt to (.not. done .and. zip_code = mzip .and. count >= 10)
  297.             go top
  298.             mzip5 = zip_code
  299.             sele 2
  300.             find &mzip5
  301.             replace order with y while zip_code = mzip5
  302.             y = y + 1
  303.             sele 1
  304.             replace sack with mnum, done with .t.
  305.             set filt to (.not. done .and. zip_code = mzip .and. count >= 10)
  306.             go top
  307.             do while .not. eof()
  308.                 sele 2
  309.                 appe blank
  310.                 replace order with y
  311.                 replace &mfield with 'Use "D" tag'
  312.                 y = y + 1
  313.                 sele 1
  314.                 mzip5 = zip_code
  315.                 sele 2
  316.                 find &mzip5
  317.                 replace order with y while zip_code = mzip5
  318.                 y = y + 1
  319.                 sele 1
  320.                 replace sack with mnum, done with .t.
  321.                 skip
  322.             enddo
  323.             set filt to (.not. done .and. zip_code = mzip)
  324.             go top
  325.             sele 2
  326.             appe blank
  327.             replace order with y
  328.             replace &mfield with 'Use "3" tag'
  329.             y = y + 1
  330.             sele 1
  331.             mzip5 = zip_code
  332.             sele 2
  333.             find &mzip5
  334.             replace order with y while zip_code = mzip5
  335.             y = y + 1
  336.             sele 1
  337.             replace sack with mnum, done with .t.
  338.             do while .not. eof()
  339.                 mzip5 = zip_code
  340.                 sele 2
  341.                 find &mzip5
  342.                 replace order with y while zip_code = mzip5
  343.                 y = y + 1
  344.                 sele 1
  345.                 replace sack with mnum, done with .t.
  346.                 skip
  347.             enddo
  348.             @ Z,7 SAY MZIP
  349.             @ Z,19 SAY MST
  350.             @ Z,28 SAY STR(MCOUNT,4)
  351.             @ Z,42 SAY STR(MNUM,2)
  352.             z = z + 2
  353.             nosack = nosack + mnum
  354.             acount = acount + mcount
  355.             set filt to (.not. done .and. count >= 10)
  356.             go top
  357.         enddo
  358.         sele 1
  359.         set filt to sack = 99
  360.         replace all done with .f., sack with 0
  361. ******************
  362. *FIND STATE SACKS*
  363. ******************
  364.         set filt to .not. done
  365.         go top
  366.         do while .not. eof()
  367.             mst = state
  368.             sum count while state = mst to mcount
  369.             if mcount >= 125
  370.                 if mcount > mmax
  371.                     mtest1 = int(mcount/mmax)
  372.                     mtest2 = int(mcount/mtest1)
  373.                     if mtest2 > mmax
  374.                         mnum = mtest1 + 1
  375.                     else
  376.                         mnum = mtest1
  377.                     endif
  378.                 else
  379.                     mnum = 1
  380.                 endif
  381.                 @ Z,7 SAY Mst
  382.                 @ Z,28 SAY STR(MCOUNT,4)
  383.                 @ Z,42 SAY STR(MNUM,2)
  384.                 z = z + 2
  385.                 bcount = bcount + mcount
  386.                 nosack = nosack + mnum
  387.                 sele 2
  388.                 appe blank
  389.                 replace order with y
  390.                 replace &mfield with 'BEGIN STATE SACK HERE'
  391.                 y = y + 1
  392.                 appe blank
  393.                 replace &mfield with 'Use ' + str(mnum,2) + ' sack(s)'
  394.                 replace order with y
  395.                 y = y + 1
  396.             else
  397.                 sum count to xcount
  398.                 if mcount <> xcount
  399.                     go top
  400.                     replace sack with 88, done with .t. while state = mst
  401.                     loop
  402.                 else
  403.                     mnum = 1    
  404.                     @ Z,7 SAY Mst
  405.                     @ Z,28 SAY STR(MCOUNT,4)
  406.                     @ Z,42 SAY STR(MNUM,2)
  407.                     z = z + 2
  408.                        bcount = bcount + mcount
  409.                     nosack = nosack + mnum
  410.                     sele 2
  411.                     appe blank    
  412.                     replace order with y
  413.                     replace &mfield with 'BEGIN STATE SACK HERE'
  414.                     y = y + 1
  415.                     appe blank
  416.                     replace &mfield with 'Use ' + str(mnum,2) + ' sack(s)'
  417.                     replace order with y
  418.                     y = y + 1
  419.                 endif
  420.             endif
  421. ******************
  422. *FIND "D" BUNDLES*
  423. ******************
  424.             sele 1
  425.             set filt to (.not. done .and. state = mst .and. count >= 10)
  426.             go top
  427.             if .not. eof()
  428.                 do while .not. eof()
  429.                     mzip = zip_code
  430.                     replace done with .t., sack with mnum
  431.                     sele 2
  432.                     appe blank
  433.                     replace order with y
  434.                     replace &mfield with 'Use "D" tag'
  435.                     y = y + 1
  436.                     find &mzip
  437.                     replace order with y while zip_code = mzip
  438.                     y = y + 1
  439.                     sele 1
  440.                     go top
  441.                     do while .not. eof()
  442.                         mzip = zip_code
  443.                         replace done with .t., sack with mnum
  444.                         sele 2
  445.                         appe blank
  446.                         replace order with y
  447.                         replace &mfield with 'Use "D" tag'
  448.                         y = y + 1
  449.                         find &mzip
  450.                         replace order with y while zip_code = mzip
  451.                         y = y + 1
  452.                         sele 1
  453.                         go top
  454.                     enddo
  455.                 enddo
  456.             endif
  457. ******************
  458. *FIND "3" BUNDLES*
  459. ******************
  460.             set filt to (.not. done .and. state = mst)    
  461.             go top
  462.             if .not. eof()
  463.                 do while .not. eof()
  464.                     mzip = left(zip_code,3)
  465.                     sum count while zip_code = mzip to mcount
  466.                     if mcount >= 10
  467.                         sele 2
  468.                         appe blank
  469.                         replace order with y
  470.                         replace &mfield with 'Use "3" tag'
  471.                         y = y + 1
  472.                         sele 1
  473.                         set filt to (.not. done .and. zip_code = mzip .and. sack < 99)
  474.                         go top
  475.                         mzip5 = zip_code
  476.                         replace done with .t., sack with mnum
  477.                         sele 2
  478.                         find &mzip5
  479.                         replace order with y while zip_code = mzip5
  480.                         y = y + 1
  481.                         sele 1
  482.                         do while .not. eof()
  483.                             go top
  484.                             mzip5 = zip_code
  485.                             replace done with .t., sack with mnum
  486.                             sele 2
  487.                             find &mzip5
  488.                             replace order with y while zip_code = mzip5
  489.                             y = y + 1
  490.                             sele 1
  491.                             go top
  492.                         enddo
  493.                     else
  494.                         go top
  495.                         replace sack with 99, done with .t. while zip_code = mzip
  496.                         go top
  497.                     endif
  498.                     set filt to (.not. done .and. state = mst)
  499.                     go top
  500.                 enddo
  501.             endif
  502. ********************
  503. *FIND STATE BUNDLES*
  504. ********************
  505.             sele 1
  506.             set filt to sack = 99
  507.             go top
  508.             if .not. eof()
  509.                 replace all done with .f., sack with 0
  510.                 set filt to (.not. done .and. state = mst)
  511.                 go top
  512.                 sele 2
  513.                 appe blank
  514.                 replace &mfield with 'Use "S" tag'
  515.                 replace order with y
  516.                 y = y + 1
  517.                 sele 1
  518.                 go top
  519.                 do while .not. eof()
  520.                     mzip = zip_code
  521.                     replace sack with mnum, done with .t.
  522.                     sele 2
  523.                     find &mzip
  524.                     replace order with y while zip_code = mzip
  525.                     y = y + 1
  526.                     sele 1
  527.                     go top
  528.                 enddo
  529.             endif
  530.         enddo
  531. *************************
  532. *FINAL MIXED STATES SACK*
  533. *************************
  534.         sele 1
  535.         set filt to sack = 88
  536.         go top
  537.         if eof()
  538.             exit
  539.         else
  540.             sele 1
  541.             sum count to mcount
  542.             mtest1 = int(mcount/mmax)
  543.             mtest2 = int(mcount/mtest1)
  544.             if mtest2 > mmax
  545.                 mnum = mtest1 + 1
  546.             else
  547.                 mnum = mtest1
  548.             endif
  549.             nosack = nosack + mnum
  550.             sele 2
  551.             appe blank
  552.             replace order with y
  553.             replace &mfield with 'BEGIN MIXED STATES SACK HERE'
  554.             y = y + 1
  555.             appe blank
  556.             replace order with y
  557.             replace &mfield with 'Use ' + str(mnum,2) + ' sack(s)'
  558.             y = y + 1
  559.             sele 1
  560.             @ z,7 say 'Mixed States'
  561.             @ z,28 say str(MCOUNT,4)
  562.             @ z,42 say str(mnum,2)
  563.             z = z + 2
  564.             bcount = bcount + mcount
  565.             nosack = nosack + mnum
  566.             replace all done with .f., sack with 0
  567. ******************
  568. *FIND "D" BUNDLES*
  569. ******************
  570.             set filt to (.not. done .and. count >= 10)
  571.             if eof()
  572.                 exit
  573.             else
  574.                 do while .not. eof()
  575.                     mzip = zip_code
  576.                     replace done with .t., sack with mnum
  577.                     sele 2
  578.                     appe blank
  579.                     replace order with y
  580.                     replace &mfield with 'Use "D" tag'
  581.                     y = y + 1
  582.                     find &mzip
  583.                     replace order with y while zip_code = mzip
  584.                     y = y + 1
  585.                     sele 1
  586.                     go top
  587.                     do while .not. eof()
  588.                         mzip = zip_code    
  589.                         replace done with .t., sack with mnum
  590.                         sele 2
  591.                         appe blank
  592.                         replace order with y
  593.                         replace &mfield with 'Use "D" tag'
  594.                         y = y + 1
  595.                         find &mzip
  596.                         replace order with y while zip_code = mzip
  597.                         y = y + 1
  598.                         sele 1
  599.                         go top    
  600.                     enddo
  601.                 enddo
  602.             endif
  603. ******************
  604. *FIND "3" BUNDLES*
  605. ******************
  606.             if eof()
  607.                 exit
  608.             else
  609.                 do while .not. eof()
  610.                     mzip = left(zip_code,3)
  611.                     sum count while zip_code = mzip to mcount
  612.                     if mcount >= 10
  613.                         set filt to (.not. done .and. zip_code = mzip .and. sack < 99)
  614.                         go top
  615.                         mzip5 = zip_code
  616.                         replace done with .t., sack with mnum
  617.                         sele 2
  618.                         appe blank    
  619.                         replace order with y
  620.                         replace &mfield with 'Use "3" tag'
  621.                         y = y + 1
  622.                         find &mzip5
  623.                         replace order with y while zip_code = mzip5
  624.                         y = y + 1
  625.                         sele 1
  626.                         do while .not. eof()
  627.                             go top
  628.                             mzip5 = zip_code
  629.                             replace done with .t., sack with mnum
  630.                             sele 2
  631.                             find &mzip5
  632.                             replace order with y while zip_code = mzip5
  633.                             y = y + 1
  634.                             sele 1
  635.                             go top
  636.                         enddo
  637.                     else
  638.                         go top
  639.                         replace sack with 99, done with .t. while zip_code = mzip
  640.                         go top
  641.                     endif
  642.                     set filt to .not. done
  643.                     go top
  644.                 enddo
  645.             endif
  646. ******************
  647. *FIND "S" BUNDLES*
  648. ******************
  649.             sele 1
  650.             set filt to sack = 99
  651.             go top
  652.             if eof()
  653.                 exit
  654.             else
  655.                 replace all done with .f., sack with 0
  656.                 set filt to .not. done 
  657.                 go top
  658.                 mst = state
  659.                 sum count while state = mst to mcount
  660.                 if mcount >= 10
  661.                     set filt to (.not. done .and. state = mst)
  662.                     go top
  663.                     mzip = zip_code
  664.                     replace done with .t., sack with mnum
  665.                     sele 2
  666.                     appe blank
  667.                     replace &mfield with 'Use "S" tag'
  668.                     replace order with y
  669.                     y = y + 1
  670.                     find &mzip
  671.                     replace order with y while zip_code = mzip
  672.                     y = y + 1
  673.                     sele 1
  674.                     do while .not. eof()
  675.                         go top
  676.                         mzip = zip_code
  677.                         replace sack with mnum, done with .t.
  678.                         sele 2
  679.                         find &mzip
  680.                         replace order with y while zip_code = mzip
  681.                         y = y + 1
  682.                         sele 1
  683.                         go top
  684.                     enddo
  685.                 else    
  686.                     go top
  687.                     replace sack with 99, done with .t. while state = mst
  688.                     go top
  689.                 endif
  690.                 set filt to .not. done
  691.             endif
  692. ***************************
  693. *FIND MIXED STATES BUNDLES*
  694. ***************************
  695.             sele 1
  696.             set filt to sack = 99
  697.             go top
  698.             if eof()
  699.                 exit
  700.             else
  701.                 replace all done with .f., sack with 0
  702.                 set filt to .not. done
  703.                 sele 2
  704.                 appe blank
  705.                 replace &mfield with 'Use "MS" tag'
  706.                 replace order with y
  707.                 y = y + 1
  708.                 sele 1
  709.                 go top
  710.                 do while .not. eof()
  711.                     mzip = zip_code
  712.                     replace sack with mnum, done with .t.
  713.                     sele 2
  714.                     find &mzip
  715.                     replace order with y while zip_code = mzip
  716.                     y = y + 1
  717.                     sele 1
  718.                     go top
  719.                 enddo
  720.             endif
  721.         endif
  722.     enddo
  723. *enddo
  724. sele 1
  725. set filt to
  726. z = z + 3
  727. @ z,25 say 'COUNT'
  728. @ z,39 say 'POSTAGE'
  729. @ z,55 say 'TOTAL'
  730. z = z + 2
  731. @ z,5 say '3/5 presort rate:  '
  732. @ z,25 say str(acount,5)
  733. @ z,30 say mfive
  734. @ z,50 say acount*mfive pict "#,###,###.##"
  735. z = z + 2
  736. @ z,5 say 'Basic rate:  '
  737. @ z,25 say str(bcount,5)
  738. @ z,30 say mbasic
  739. @ z,50 say bcount*mbasic pict "#,###,###.##"
  740. z = z + 3
  741. @ z,5 say 'TOTAL'
  742. @ z,25 say str(acount+bcount,5)
  743. @ z,50 say (acount*mfive)+(bcount*mbasic) pict "#,###,###.##"
  744. z = z + 2
  745. @ z,5 say 'Total sacks in mailing:  ' + str(nosack,3)
  746. eject
  747. sele 2
  748. sort to &mlist on order
  749. zap
  750. set device to screen
  751. CLEAR ALL               
  752. SET TALK on          
  753. SET BELL on            
  754. SET HEADING on       
  755. SET DELETED off
  756. SET SAFETY on
  757.